/*
 * @Author: zhangzhen
 * @Date: 2023-01-03 09:07:24
 * @LastEditors: zhangzhen
 * @LastEditTime: 2023-02-28 16:30:21
 *
 */
import {createContext} from 'react';
import {FormInstance, } from 'antd';
import {LayoutType} from "./constant"

export interface FormConTextValueType {
    /**
     * 名称
     */
    label: string;
    /**
     * 表单项字段名
     */
    name: string;
    /**
     * 表单项唯一标识
     */
    key: string;
    /**
     * 表单项可编辑性
     */
    disabled: boolean;
    /**
     * 是否必填
     */
    required: boolean;

    /**
     * 是否作为条件查询
     */
    isSearch: boolean;
    /**
     * 是否作为业务数据统计显示在列表
     */
    isShowInTable: boolean;
    /**
     * label标签布局
     */
    rules?: any[];
    /**
     * label标签布局
     */
    labelCol?: Object;
    /**
     * 输入控件布局
     */
    wrapperCol?: Object;
    // TODO:参数不确定
    /**
     * 表单项数据来源 0 :手动输入，1：接口获取
     */
    infoCome?: 0 | 1;
    /**
     * 表单项数据来源 接口地址
     */
    api?: string;
    /**
     * 表单项提示语
     */
    placeholder?: string;
    /**
     * 数据类型
     */
    infoType?: number;
    /**
     * 默认值
     */
    defaultValue?: any;
    /**
     * select，CheckBox，Radio等表单项数据源
     */
    options?: {label: string; value: any}[];
    /**
     * Table列配置项
     */
    columns?: Record<string, any>[];
    /**
     * 有不同表单项所有添加任意属性
     */
    [propName: string]: any;
}

// formContext类型
type FormConTextType = {
    /**
     * 表单数据数组
     */
    formConTextValue: FormConTextValueType[];
    /**
     * 表单数据方法
     */
    setFormConTextValue: (value: FormConTextValueType[]) => void;
    /**
     * 获取表单数据方法
     */
    getFormConTextValue: () => void;
    /**
     * 是否可编辑
     */
    isEditing: boolean;
    /**
     * 设置是否可编辑
     */
    setIsEditing: (value: boolean) => void;
    /**
     * 当前选中表单
     */
    currentItem: FormConTextValueType;
    /**
     * 设置当前选中表单方法
     */
    setCurrentItem: (value: any) => void;
    /**
     * 当前选中表单项的下标
     */
    currentIndex: number;
    /**
     * 设置当前选中表单项的下标
     */
    setCurrentIndex: (value: number | null) => void;
    /**
     * 表单form
     */
    formRef: FormInstance | undefined;
    /**
     * 设置表单form方法
     */
    setFormRef: (value: FormInstance) => void;
    /**
     * Form的布局
     * colspan每行有几个表单项1,2,3列
     * labelCol标签宽度
     * layout表单布局
     */
    layoutParams: LayoutType;
    /**
     * 设置layout方法
     */
    setLayoutParams: (value: LayoutType) => void;
};

export const FormContext = createContext<FormConTextType>({} as any);
